#include "TableauDynamique.h"
#include <stdlib.h>
#include <stdio.h>


void initialiser (TableauDynamique * t)
{
	(*t).capacite = 1;
	(*t).adressePremierElt = (void **)malloc(sizeof(void **));
	(*t).tailleUtilise = 0;
}


void testament (TableauDynamique * t)
{
	if((*t).adressePremierElt != 0)
	{	
		free((*t).adressePremierElt);
		(*t).adressePremierElt = 0;
		(*t).tailleUtilise = 0;
		(*t).capacite = 0;
	}
}

void ** ValeurIemeElementTabDyn(const TableauDynamique  t , unsigned int ieme)
{
	return (t).adressePremierElt[ieme];
}

void afficheTabDyn(const TableauDynamique * t)
{
	int position;
	printf("\n");
	for(position=0;position<(*t).tailleUtilise;position++)
	{
		printf("[");
		printf("(*t).adressePremierElt[position]");
		printf("]");
	}
	printf("\n");
}
	
void ajouteElement (TableauDynamique * t, void ** Elt)
{
	int i;
	if((*t).tailleUtilise==(*t).capacite)
	{	
		void ** temp = (*t).adressePremierElt;
		(*t).adressePremierElt = (void **) malloc (2*(*t).capacite*sizeof(void **));
		for(i=0;i<(*t).tailleUtilise;i++)
		{
		        (*t).adressePremierElt[i]=temp[i];
		}
		(*t).capacite = (*t).capacite * 2;
		free(temp);
	}
	(*t).adressePremierElt[(*t).tailleUtilise] = Elt;
	(*t).tailleUtilise ++;
}

void modifieValeurIemeElementTabDyn(TableauDynamique * t, void ** Elt, unsigned int i)
{
	t->adressePremierElt[i]=Elt;
}

void supprimeDernierElementTabDyn(TableauDynamique * t)
{
	t->tailleUtilise--;
}

void affecterTableauDyn(const TableauDynamique * t1, const TableauDynamique * t2)
{
	int i;
	t1->capacite = t2->capacite;
	for(i=0; i <= t2->tailleUtilise; i++)
	{
		t1->adressePremierElt[i] = t2->adressePremierElt[i];
	}
	t1->adressePremierElt = t2->adressePremierElt;
}
 	
